home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / mmdf / mmdf-IIb.43 / src / prog / ch_prog.c next >
Encoding:
C/C++ Source or Header  |  1990-02-28  |  2.2 KB  |  124 lines

  1. /*
  2.  *    MULTI-CHANNEL MEMO DISTRIBUTION FACILITY  (MMDF)
  3.  *
  4.  *    Department of Electrical Engineering
  5.  *    University of Delaware
  6.  *    Newark, Delaware  19711
  7.  *
  8.  *
  9.  *    Program Channel: Take message and feed a request to a program
  10.  *
  11.  *
  12.  *    C H _ P R O G . C
  13.  *    =================
  14.  *
  15.  *    main program (qu2pr_send does the interesting work)
  16.  *
  17.  *    J.B.D.Pardoe
  18.  *    University of Cambridge Computer Laboratory
  19.  *    October 1985
  20.  *    
  21.  *    based on the UUCP channel by Doug Kingston (US Army Ballistics 
  22.  *    Research Lab, Aberdeen, Maryland: <dpk@brl>)
  23.  *
  24.  */
  25.  
  26. #include "util.h"
  27. #include "mmdf.h"
  28. #include "ch.h"
  29. #include "phs.h"
  30. #include <signal.h>
  31.  
  32.  
  33. extern struct ll_struct chanlog;
  34. extern char logdfldir[];
  35. struct ll_struct  *logptr = &chanlog;
  36.  
  37. Chan *chan;
  38.  
  39.  
  40. /*
  41.  * main
  42.  * ====
  43.  */
  44. main (argc, argv)
  45.     short   argc;
  46.     char   *argv[];
  47. {
  48.     char *dupfpath ();
  49.     short retval;
  50.  
  51.     mmdf_init (argv[0]);
  52.     siginit ();
  53.     signal (SIGINT, SIG_IGN); 
  54.  
  55.     if ((chan = ch_nm2struct (argv[0])) == (Chan *) NOTOK)
  56.     err_abrt (RP_PARM, "unknown channel name '%s'", argv[0]);
  57.  
  58.     retval = ch_prog (argc, argv);
  59.     ll_close (logptr);
  60.  
  61. #ifdef DEBUG
  62.     ll_log (logptr, LLOGPTR, "exit value is %d.", retval);
  63. #endif
  64.  
  65.     exit (retval);
  66. }
  67.  
  68. /*
  69.  * ch_prog
  70.  * =======
  71.  */
  72. ch_prog (argc, argv)
  73.     short   argc;
  74.     char   *argv[];
  75. {
  76.     ch_llinit (chan);
  77. #ifdef DEBUG
  78.     ll_log (logptr, LLOGPTR, "ch_prog ()");
  79. #endif
  80.  
  81.     if (rp_isbad (qu_init (argc, argv)))
  82.     return (RP_NO);
  83.  
  84.     lowerfy (chan->ch_lname);
  85.  
  86.     phs_note (chan, PHS_CNSTRT);
  87.     phs_note (chan, PHS_CNGOT);
  88.  
  89.     if (rp_isbad (qu2pr_send ()))
  90.     return (RP_NO);          
  91.  
  92.     qu_end (OK);
  93.     phs_note  (chan, PHS_CNEND);
  94.  
  95. #ifdef DEBUG
  96.     ll_log (logptr, LLOGFTR, "ch_prog: Normal Return!");
  97. #endif
  98.     return (OK);
  99. }
  100.  
  101.  
  102. err_abrt (code, f, a0, a1, a2)
  103.     short code;
  104.     char  *f, *a0, *a1, *a2;
  105. {
  106.     char buf [LINESIZE];
  107.  
  108.     qu_end (NOTOK);
  109.  
  110. #ifdef DEBUG
  111.     if (rp_isbad (code)) {
  112.     if (rp_gbval (code) == RP_BNO || logptr->ll_level >= LLOGTMP) {
  113.         /* don't worry about minor stuff */
  114.         sprintf (buf, "%s%s", "err [ ABEND (%s) ]\t", f);
  115.         ll_log (logptr, LLOGFAT, buf, rp_valstr (code), a0, a1, a2);
  116.         abort (code);
  117.     }
  118.     }
  119. #endif /* DEBUG */
  120.  
  121.     ll_close (logptr);           /* in case of cycling, close neatly   */
  122.     exit (code);
  123. }
  124.